package mysql

import (
	"database/sql"
	"fmt"
	"go_web/models"
	"go_web/pkg/gen_id"
	"go_web/utils"
)

//此文件主要是对用户登陆注册模块的数据库操作(封装)

//注册时候，需要对数据库的操作
func Register(user *models.User) (err error) {
	//1.从数据库中查询用户信息
	sqlStr := "select count(user_id) from user where username = ?"

	var count int64
	//Get有3个参数的
	err = db.Get(&count, sqlStr, user.UserName)
	if err != nil && err != sql.ErrNoRows {
		return err
	}

	//2.若是查询出用户的信息，直接返回
	if count > 1 {
		return ErrorUserExit
	}

	//3.若是没有查询出用户的信息，需要先生成用户的ID
	userId, err := gen_id.GetID()
	if err != nil {
		return ErrorGenIDFailed
	}
	//4.对用户的密码进行加密存储到数据库中
	password := utils.EncryptPassword([]byte(user.PassWord))

	sqlStr = "insert into user(user_id, username, password) values (?,?,?)"
	_, err = db.Exec(sqlStr, userId, user.UserName, password)

	return
}

//登陆的时候，对数据库的操作
func Login(user *models.User) (err error) {
	originPassword := user.PassWord //获取前端传过来的密码

	//查询数据库
	sqlStr := "select user_id, username, password from user where username = ?"
	err = db.Get(user, sqlStr, user.UserName)
	if err != nil && err != sql.ErrNoRows {
		return //数据库查询报错
	}
	//将传入的密码进行加密和数据库中的密码进行对比
	pwd := utils.EncryptPassword([]byte(originPassword))

	//比对密码
	if user.PassWord != pwd {
		fmt.Println("出错了!")
		return ErrorPasswordWrong
	}
	return
}

func GetUserByID(idStr string) (user *models.User, err error) {
	user = new(models.User)
	sqlStr := `select user_id, username from user where user_id = ?`
	err = db.Get(user, sqlStr, idStr)
	return
}
